package problem.ej2;

import input.Problem2Input;
import instance.Instance;
import instance.InstanceEj2;


import java.util.Iterator;
import java.util.LinkedList;

import output.Problem2Output;

public class Ej2 {
	public static int contador_ej2; /*El contador que vamos a usar para medir el rendimiento*/

	public static void AlgoritmoPpal(String nomarch, boolean test_rend) throws Exception {
	/**Leer del archivo y generar el grafo:**/
		
		Problem2Input entrada = new Problem2Input(nomarch);
		
		
		entrada.readFile();/*Ya tengo todas las instances en entrada.instances*/
		LinkedList<Instance> instancias = entrada.getInstances();
		LinkedList<Integer> soluciones = new LinkedList<Integer>();
		LinkedList<String> strings_test_rend = new LinkedList<String>();
		Iterator<Instance> it = instancias.iterator();
		while(it.hasNext()){
			InstanceEj2 inst =(InstanceEj2) it.next();
			Ejes_strings p_y_q=inst.getP_y_q();
			int sol = 0;
			Ej2.contador_ej2 = 0;

			LinkedList<Ejes_strings> lista_adyacencia = inst.getInstancia();
			if(lista_adyacencia.isEmpty()) soluciones.add(0); 
			else{
//				int tamano = lista_adyacencia.size();
				/**Generar el grafo:**/
				Grafo g = new Grafo(lista_adyacencia);
				int p = g.deInvAVertice(p_y_q.inv_1); int q = g.deInvAVertice(p_y_q.inv_2);
				/**Aplicar el BFS modificado:**/
				int tamano = g.getCantVertices();
				if(p>= 0 && q>= 0 ) sol = g.BFS_mod(p, q);
					if(test_rend){
						long estimatedTime = Ej2.contador_ej2;
						String linea = String.valueOf(tamano) + " " +String.valueOf(estimatedTime);
						strings_test_rend.add(linea);
					}
					else soluciones.add(sol);
			}
			
		}
		if(!test_rend){
			Problem2Output salida = new Problem2Output(nomarch +".solucion");
			salida.escribirSolucion(soluciones);
		}
		else{
			String ArchSalida=nomarch + ".testRend";
			Problem2Output salida = new Problem2Output(ArchSalida);
			salida.writeTestRend(strings_test_rend);
		}
	}
	public static void main(String[] args) throws Exception  {
		AlgoritmoPpal("./src/resources/Tp1Ej2.in", false);
	}

}
